package com.xjh.basestudy.javabase.javaweb.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class jdbcDemo2 {
    public static void main(String[] args) {
        //把这两个对象引用定义为全局类型，如果只定义在try里，只在try里起作用，在finally里释放资源就找不到这两个对象。
        Statement stmt = null;
        Connection conn = null;
        try {
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.定义sql
            String sql = "insert into account values(null,'wangwuhh',3000)";//id是主键，所以主键的值不用给，写null作为占位符
            //3.获取连接对象
            conn = DriverManager.getConnection("jdbc:sql://localhost:3306/girls", "root", "root");
            //4.执行获取sql的对象 Statement
            stmt = conn.createStatement();
            //5.执行sql
            int count = stmt.executeUpdate(sql);//影响行数
            //6.处理结果
            System.out.println(count);
            if (count > 0) {
                System.out.println("添加成功");
            } else {
                System.out.println("添加失败");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {//要在finally里释放资源，因为如果上面的报错，需要防止下面的代码不执行，而finally里的代码是一定执行的，所以在finally里，资源最终一定会被释放
//                stmt.close();不能直接这样释放资源，因为当密码写错时，会不执行下面的语句（stmt未执行到申请资源，就跳到finally里，会造成空指针异常
            //stmt是后申请的资源，所以先释放它
            if (stmt != null) {//为了避免空指针异常，先做判断
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            //conn是先申请的资源，后释放
            if (conn != null) {//为了避免空指针异常，先做判断
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }


    }
}
 //执行sql
